<#if imPackage??>
package ${imPackage};
</#if>

<#if impotrs??>
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.util.Date;
<#list impotrs as tempinp>
import ${tempinp};
</#list>

</#if>

public class ${javaname}Example {
protected String orderByClause;

protected boolean distinct;

protected List<Criteria> oredCriteria;

    public ${javaname}Example() {
    oredCriteria = new ArrayList<Criteria>();
        }

        public void setOrderByClause(String orderByClause) {
        this.orderByClause = orderByClause;
        }

        public String getOrderByClause() {
        return orderByClause;
        }

        public void setDistinct(boolean distinct) {
        this.distinct = distinct;
        }

        public boolean isDistinct() {
        return distinct;
        }

        public List<Criteria> getOredCriteria() {
            return oredCriteria;
            }

            public void or(Criteria criteria) {
            oredCriteria.add(criteria);
            }

            public Criteria or() {
            Criteria criteria = createCriteriaInternal();
            oredCriteria.add(criteria);
            return criteria;
            }

            public Criteria createCriteria() {
            Criteria criteria = createCriteriaInternal();
            if (oredCriteria.size() == 0) {
            oredCriteria.add(criteria);
            }
            return criteria;
            }

            protected Criteria createCriteriaInternal() {
            Criteria criteria = new Criteria();
            return criteria;
            }

            public void clear() {
            oredCriteria.clear();
            orderByClause = null;
            distinct = false;
            }

            protected abstract static class GeneratedCriteria {
            protected List<Criterion> criteria;

                protected GeneratedCriteria() {
                super();
                criteria = new ArrayList<Criterion>();
                    }

                    public boolean isValid() {
                    return criteria.size() > 0;
                    }

                    public List<Criterion> getAllCriteria() {
                        return criteria;
                        }

                        public List<Criterion> getCriteria() {
                            return criteria;
                            }

                            protected void addCriterion(String condition) {
                            if (condition == null) {
                            throw new RuntimeException("Value for condition cannot be null");
                            }
                            criteria.add(new Criterion(condition));
                            }

                            protected void addCriterion(String condition, Object value, String property) {
                            if (value == null) {
                            throw new RuntimeException("Value for " + property + " cannot be null");
                            }
                            criteria.add(new Criterion(condition, value));
                            }

                            protected void addCriterion(String condition, Object value1, Object value2, String property) {
                            if (value1 == null || value2 == null) {
                            throw new RuntimeException("Between values for " + property + " cannot be null");
                            }
                            criteria.add(new Criterion(condition, value1, value2));
                            }

                            protected void addCriterionForJDBCTime(String condition, Date value, String property) {
                            if (value == null) {
                            throw new RuntimeException("Value for " + property + " cannot be null");
                            }
                            addCriterion(condition, new java.sql.Time(value.getTime()), property);
                            }

                            protected void addCriterionForJDBCTime(String condition, List<Date> values, String property) {
                                if (values == null || values.size() == 0) {
                                throw new RuntimeException("Value list for " + property + " cannot be null or empty");
                                }
                                List<java.sql.Time> timeList = new ArrayList<java.sql.Time>();
                                    Iterator<Date> iter = values.iterator();
                                        while (iter.hasNext()) {
                                        timeList.add(new java.sql.Time(iter.next().getTime()));
                                        }
                                        addCriterion(condition, timeList, property);
                                        }

                                        protected void addCriterionForJDBCTime(String condition, Date value1, Date value2, String property) {
                                        if (value1 == null || value2 == null) {
                                        throw new RuntimeException("Between values for " + property + " cannot be null");
                                        }
                                        addCriterion(condition, new java.sql.Time(value1.getTime()), new java.sql.Time(value2.getTime()), property);
                                        }

                            <#list columnnameandtypemap?keys as pname>
                                <#list columnnameandtypemap[pname]?keys as iname>
                                    public Criteria and${pname?cap_first}IsNull(){
                                    addCriterion("${javaname_tabname_map[pname]} is null");
                                    return (Criteria) this;
                                    }
                                    public Criteria and${pname?cap_first}IsNotNull() {
                                    addCriterion("${javaname_tabname_map[pname]} is not null");
                                    return (Criteria) this;
                                    }
                                    public Criteria and${pname?cap_first}EqualTo(${columnnameandtypemap[pname][iname]} value) {
                                    addCriterion("${javaname_tabname_map[pname]} =", value, "${pname}");
                                    return (Criteria) this;
                                    }
                                    public Criteria and${pname?cap_first}NotEqualTo(${columnnameandtypemap[pname][iname]} value) {
                                    addCriterion("${javaname_tabname_map[pname]} <>", value, "${pname}");
                                    return (Criteria) this;
                                    }

                                    public Criteria and${pname?cap_first}GreaterThan(${columnnameandtypemap[pname][iname]} value) {
                                    addCriterion("${javaname_tabname_map[pname]} >", value, "${pname}");
                                    return (Criteria) this;
                                    }

                                    public Criteria and${pname?cap_first}GreaterThanOrEqualTo(${columnnameandtypemap[pname][iname]} value) {
                                    addCriterion("${javaname_tabname_map[pname]} >=", value, "${pname}");
                                    return (Criteria) this;
                                    }

                                    public Criteria and${pname?cap_first}LessThan(${columnnameandtypemap[pname][iname]} value) {
                                    addCriterion("${javaname_tabname_map[pname]} <", value, "${pname}");
                                    return (Criteria) this;
                                    }

                                    public Criteria and${pname?cap_first}LessThanOrEqualTo(${columnnameandtypemap[pname][iname]} value) {
                                    addCriterion("${javaname_tabname_map[pname]} <=", value, "${pname}");
                                    return (Criteria) this;
                                    }

                                    public Criteria and${pname?cap_first}In(List<${columnnameandtypemap[pname][iname]}> values) {
                                    addCriterion("${javaname_tabname_map[pname]} in", values, "${pname}");
                                    return (Criteria) this;
                                    }

                                    public Criteria and${pname?cap_first}NotIn(List<${columnnameandtypemap[pname][iname]}> values) {
                                    addCriterion("${javaname_tabname_map[pname]} not in", values, "${pname}");
                                    return (Criteria) this;
                                    }

                                    public Criteria and${pname?cap_first}Between(${columnnameandtypemap[pname][iname]} value1, ${columnnameandtypemap[pname][iname]} value2) {
                                    addCriterion("${javaname_tabname_map[pname]} between", value1, value2, "${pname}");
                                    return (Criteria) this;
                                    }

                                    public Criteria and${pname?cap_first}NotBetween(${columnnameandtypemap[pname][iname]} value1, ${columnnameandtypemap[pname][iname]} value2) {
                                    addCriterion("${javaname_tabname_map[pname]} not between", value1, value2, "${pname}");
                                    return (Criteria) this;
                                    }

                                    public Criteria and${pname?cap_first}Like(${columnnameandtypemap[pname][iname]} value) {
                                    addCriterion("${javaname_tabname_map[pname]} like", value, "${pname}");
                                    return (Criteria) this;
                                    }

                                    public Criteria and${pname?cap_first}NotLike(${columnnameandtypemap[pname][iname]} value) {
                                    addCriterion("${javaname_tabname_map[pname]} not like", value, "${pname}");
                                    return (Criteria) this;
                                    }
                                </#list>
                            </#list>
                                        }

                                        public static class Criteria extends GeneratedCriteria {

                                        protected Criteria() {
                                        super();
                                        }
                                        }

                                        public static class Criterion {
                                        private String condition;

                                        private Object value;

                                        private Object secondValue;

                                        private boolean noValue;

                                        private boolean singleValue;

                                        private boolean betweenValue;

                                        private boolean listValue;

                                        private String typeHandler;

                                        public String getCondition() {
                                        return condition;
                                        }

                                        public Object getValue() {
                                        return value;
                                        }

                                        public Object getSecondValue() {
                                        return secondValue;
                                        }

                                        public boolean isNoValue() {
                                        return noValue;
                                        }

                                        public boolean isSingleValue() {
                                        return singleValue;
                                        }

                                        public boolean isBetweenValue() {
                                        return betweenValue;
                                        }

                                        public boolean isListValue() {
                                        return listValue;
                                        }

                                        public String getTypeHandler() {
                                        return typeHandler;
                                        }

                                        protected Criterion(String condition) {
                                        super();
                                        this.condition = condition;
                                        this.typeHandler = null;
                                        this.noValue = true;
                                        }

                                        protected Criterion(String condition, Object value, String typeHandler) {
                                        super();
                                        this.condition = condition;
                                        this.value = value;
                                        this.typeHandler = typeHandler;
                                        if (value instanceof List<?>) {
                                        this.listValue = true;
                                        } else {
                                        this.singleValue = true;
                                        }
                                        }

                                        protected Criterion(String condition, Object value) {
                                        this(condition, value, null);
                                        }

                                        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
                                        super();
                                        this.condition = condition;
                                        this.value = value;
                                        this.secondValue = secondValue;
                                        this.typeHandler = typeHandler;
                                        this.betweenValue = true;
                                        }

                                        protected Criterion(String condition, Object value, Object secondValue) {
                                        this(condition, value, secondValue, null);
                                        }
                                        }
}